今天我想先介紹這個好用的內網穿透的服務 cloudflared tunnel
以往我們想要將自己電腦內的服務提供給其他人使用的時候,比較常見的是會使用ngrok這類的服務來把自己電腦的某一個port連到某一個網址,這時候將這個網址提供給另一個人,就可以將服務的流量透過ngrok的服務導傳到你的電腦上
但會遇到一個困擾是,ngrok的免費版本,如果重開了ngrok,他的網址會變,所以如果電腦重新開機會是需要重新設定port的話,原本的連結就會失效,而這時候,cloudflared tunnel就可以有效的解決這個問題
cloudflared tunnel一樣可以有提供流量轉發的功能,而且他可以透過在網站上的設定,設定一組網域,將流量直接導傳到你的服務中,所以網址不會變,而且還可以根據你的服務,設定一組有意義的domain,更棒的是,因為cloudflare本身就有提供不錯的防火牆功能,再加上還可以透過將指定網址設定email驗證,來達到某種程度的mfa功能,根本是免費仔的天堂!!
說了這麼多,我們來介紹應該怎麼設定他,以下會由上到下依序的說明步驟,並且會註明線這設定的是本機的電腦還是cloudflare的網頁,本機的電腦我用mac來代替
將cloudflare的name server(名稱伺服器/ns)設定到你購買的domain的服務商的設定畫面中,以下附上我在cloudflare跟godaddy的設定畫面的擷圖,大家可以找一下相關的畫面
eyJhIjoiYzE2MjpNdyJ9
作為接下來示範的token,實際上的token會比我的更長,然後先不要關掉這個頁面,接下來會用到docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiYzE2MjpNdyJ9
cloudflared_tunnel
,模式使用bridge
docker network create -d bridge cloudflared_tunnel
version: "3.9"
networks:
cloudflared_tunnel:
driver: bridge
external: true
services:
nginx:
container_name: demo_nginx
image: nginx:latest
networks: ['cloudflared_tunnel']
cloudflared:
container_name: cloudflared_tunnel
image: cloudflare/cloudflared:latest
restart: unless-stopped
networks: ['cloudflared_tunnel']
command: tunnel run
environment:
- TUNNEL_TOKEN=eyJhIjoiYzE2MjpNdyJ9
docker compose up -d
docker compose logs -f
subdomain
要填上你想要設定的對外網址的前綴service
要設定在mac
裡面的cloudflared tunnel怎麼樣連到你設定好的服務,在剛剛的docker-compose.yaml中,如果要從cloudflared_tunnel
去拜訪demo_nginx
這個服務,可以用http://demo_nginx:80
來拜訪add public hostname
並設定你想要保護的網址,在後面的path的部分,可以讓你指定說特定的路徑下才保護(比如wordpress的/wp-admin.php,或是其他服務的登入的路徑)